package common.project.epic.db;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class DevicesHistory {
	
	private List<String> dhList = new ArrayList<String>();
	private EpicRTOpenHelper db ;
	private String table = "deviceHY";
	//private String table = "deviceHY";
	private SQLiteDatabase epicHYwritable = db.getWritableDatabase();
	
	//restituiscono e settano i valori nella lista
	public void setDhList(List<String> dhList) {
		
			this.dhList = dhList;
		
		}
		
	
	
	public List<String> getDhList() {
			
			if(dhList != null){
			//TODO deve inserire in dhList la lista dei record in device history
				String sql = "SELECT COUNT(*) FROM deviceHY";
				Cursor result = epicHYwritable.rawQuery(sql, null);
				while(result.moveToNext()){
					//restituisce il valore della colonna Mac e li aggiunge alla lista
					dhList.add(result.getString(1));
					
				}
				return dhList;
			}
			
			return null;
		}

	//METODO DI AGGIUNTA DISPOSITIVO
	//restituisce 0 se il dispositivo è stato inserito con successo
	//restituisce n con n il numero di elementi con lo stesso mac address
	//restituisco -1 se ho avuto problemi con la scrittura sul db
	public int AddDevice(String macAddress, String name){
		//preparo la query: SELECT mac FROM deviceRT WHERE mac = macAddress ;
		
		String selection = "mac";
		String[] selectionArgs = {macAddress};
		String orderBy = "mac ASC";
		
		Cursor result = epicHYwritable.query(table, null, selection, selectionArgs, null, null, orderBy);
		
		if(result.getCount() == 0){
			//inserisco il mio dispositivo
			ContentValues newDevice = new ContentValues();
			newDevice.put("mac", macAddress);
			newDevice.put("name", name);
			if (epicHYwritable.insertOrThrow(table, null, newDevice)!=-1){
				return 0; //riga inserita con successo
			}
			
			return -1; //errore nell'inserimento
			
		}else{
			//elemento gi� presente, restituisco il numero di elementi con quello stesso macaddress nel caso in cui abbia dispositivi con stesso mac address ma con nomi diversi (pi� utenti che usano lo stesso dispositivo)
			int counter = 0;
			while(result.moveToNext()){
				
				counter = counter +1;
				
			}
			return counter;//restituisco il numero di righe
		}
	}
	
	//METODO DI RIMOZIONE DEL DISPOSITIVO
	
	public int RemoveDevice(String macAddress, String name){
		
		
		if (name == null){ 
		String whereClause = "mac = ?";
		String[] whereArgs = {macAddress};
		return epicHYwritable.delete(table, whereClause, whereArgs);//restituisce -1 se nessuna occorrenza da rimuovere era presente altrimenti restituisce il numero ri occorrenze eliminate
		}
		else if(macAddress == null){

			String whereClause = "name = ?";
			String[] whereArgs = {name};
			return epicHYwritable.delete(table, whereClause, whereArgs);//restituisce -1 se nessuna occorenza da rimuovere era presente altrimenti restituisce il numero ri occorrenze eliminate
				
		}
		else  if(macAddress != null && name != null){
			
			String whereClause = "mac = ? AND name = ?";
			String[] whereArgs = {macAddress, name};
			return epicHYwritable.delete(table, whereClause, whereArgs);//restituisce -1 se nessuna occorrenza da rimuovere era presente altrimenti restituisce il numero ri occorrenze eliminate

			
		}
		return  -1;
	}
	
	
	public int RemoveAll(){

		
		String whereClause = "1";
		return epicHYwritable.delete(table, whereClause, null);//restituisce il numero di occorrenze eliminate

		
	}
	
	public int getDeviceCount(){
		
		String sql = "SELECT COUNT(*) FROM deviceRT";
		Cursor result = epicHYwritable.rawQuery(sql, null);
		return result.getCount();
	
	}
	
	
	public ContentValues EditDevice(String macAddress, String newMacAddress,  String name, String newName){
		
		ContentValues values = new ContentValues();
		
		if(newMacAddress != null && newName != null){
			values.put("mac", newMacAddress);
			values.put("name", newName);
			String whereClause = "mac = ? AND name = ?";
			String[] whereArgs = {macAddress, name};
			epicHYwritable.update(table, values, whereClause, whereArgs);
			return values;
		}else if(newMacAddress == null && newName != null){
			values.put("mac", macAddress);
			values.put("name", newName);
			String whereClause = "mac = ? AND name = ?";
			String[] whereArgs = {macAddress, name};
			epicHYwritable.update(table, values, whereClause, whereArgs);
			return values;
		}else if(newMacAddress != null && newName == null){
			values.put("mac", newMacAddress);
			values.put("name", name);
			String whereClause = "mac = ? AND name = ?";
			String[] whereArgs = {macAddress, name};
			epicHYwritable.update(table, values, whereClause, whereArgs);
			return values;
		}
		return values;
		
	}
	
	public ContentValues[] getDevices(){
		//TODO completare il metodo creando un array di coppie chiave valore contenente tutti i dispositivi
		ContentValues oneocc = new ContentValues();
		ContentValues[] tmp = {oneocc,oneocc,oneocc};
		return tmp;
	}
	
	
}
